TplUI = {
	tree:$.fn.zTree,
	load:function(id,url,data,callback){
		if($.isFunction(data)){
			callback=data;
			data={};
		}
		data=data||{};
		data["X-Requested-With"]=true;
		$(id).load(url,data,function(response,status,xhr){
			try{
				var _ckdata=JSON.parse(response);
				if(_ckdata.ERRORALERT!=null){
					if(_ckdata.ERRORALERT){
						alert(_ckdata.message);
					}else{
						alert(_ckdata.message,function(){
							location.href=_ckdata.href;
						});
					}
					return false;
				}
			}catch(e){
				
			}
			if(callback&&$.isFunction(callback))
				callback(response,status,xhr);
		})
	},
    /**
	 * 在jquery.ajax基础上封装的ajax调用方法
     * @param config 除了完全兼容jquery.ajax的所有属性外，增加以下个性化属性：
	 * 				 1. form : 传入页面form表单的ID，也可是一个对象，方法使用时会将其做转换{form=$(form);}
	 * 				 2.	afterValid : 如果传入一个form,会调用表单检验方法TplUI.checkForm,校验完成后会调用此回调方法
	 * 				 3. fail : form验证失败时的回调，难失败ajax不会执行
	 * 				 4. 其它 : 其它参考jquery.ajax帮助
     * @returns {*}
     */
	ajax : function(config) {
		var _params = {};
		if (config.form) {
			var _form = this.checkForm(config.form);
			if(config.afterValid){//验证表单后执行
                var _rel=config.afterValid(_form.success);
                if(_rel===false)//停止执行时返回false
                	return;
            }
			if (!_form.success){
				if(config.fail)
					config.fail();
				return;
			}
			_params = _form.params;
            for(var p in config.data)
                _params.push({name:p,value:config.data[p]});
            config.data=_params;
		}
		config.type=config.type||"post";
		config.data = config.data || {};
		config.traditional= config.traditional||true;
		var beforeSend=config.beforeSend;
		var _success=config.success;
		config.success=function(data, textStatus){
				var _ckdata=config.dataType=="json"?data:JSON.parse(data);
			if(_ckdata.ERRORALERT!=null){
				TplUI.unmask();
				if(_ckdata.ERRORALERT){
					alert(_ckdata.message,{icon:"warning"});
				}else{
					alert(_ckdata.message,{icon:"warning",callback:function(){
						location.href=_ckdata.href;
					}});
					return;
				}
			}else
				if(_success)
					_success(_ckdata, textStatus);
		};
		config.beforeSend=function (XMLHttpRequest) {
			//XMLHttpRequest.setRequestHeader("ajax", "true");
			if(beforeSend)
				beforeSend(XMLHttpRequest);
		};
		if(!config.url){
			if(_success)
				_success({success:false}, 0);
			throw("URL不能为空");
		}
		var _ajax=$.ajax(config);
		return _ajax;
	},
    checkForm : function (form){
		var _form={success:true,params:{}};
		if(form){
            var params=$(form).serializeArray();
            // for(var i=0;i<params.length;i++){
            	// var p=params[i];
            	// _form.params[p.name]=p.value;
			// }
            _form.params=params;
		}
		return _form;
	},
	mask : function(msg) {
        return msg?layer.msg(msg, {
            icon: 16,
			time:0,
            shade: [0.15,'#000']
        }):layer.load(2, {
            shade: [0.15,'#000']
        });
	},
	unmask : function(id) {
		layer.close(id);
	}
};

window.confirm=function(str,callback){
	layer.confirm(str,function(index){layer.close(index);callback(true)},function(){callback(false)});
};
window.alert = function(str,callback) {
	layer.alert(str,function(index){
		layer.close(index);
		if(callback){
			if($.isFunction(callback)){
				callback();
			}else if(callback.yes&&$.isFunction(callback.yes)){
				callback.yes();
			}
		}
	})
};
String.prototype.replaceAll  = function(s1,s2){
    return this.replace(new RegExp(s1,"gm"),s2);
}
function validate(id,msg){
	var _v=$.trim($("#"+id).val());
	if(!_v){
		alert(msg);
		return true;
	}
}